package zm.irc.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;


public class JsonUtils {
    /**
     * Bean对象转JSON
     *
     * @param object
     * @param dataFormatString
     * @return
     */
    public static String beanToJson(Object object, String dataFormatString) {
        if (object != null) {
            if (StringUtils.isEmpty(dataFormatString)) {
                return JSONObject.toJSONString(object);
            }
            return JSON.toJSONStringWithDateFormat(object, dataFormatString);
        } else {
            return null;
        }
    }


    /**
     * 将json字符串转换成对象
     *
     * @param json
     * @param clazz
     * @return
     */
    public static <T> T jsonToBean(String json, Class<T> clazz) {
        if (StringUtils.isEmpty(json) || clazz == null) {
            return null;
        }
        return JSON.parseObject(json, clazz);
    }

    /**
     * <pre>
     * 将json字符串转换成对象,有泛型需要的，可使用这个方法
     * 例如 : XXXX<aaa> i = ( XXXX<aaa>) JsonUtils.jsonToBean(json,new TypeReference< XXXX<aaa>>(){})
     * </pre>
     * @param json
     * @param typeRef
     * @return
     */
    public static <T> T jsonToBean(String json, TypeReference<T> typeRef) {
        if (StringUtils.isEmpty(json) || typeRef == null) {
            return null;
        }
        return JSON.parseObject(json, typeRef);
    }

    /**
     * Bean对象转JSON
     *
     * @param object
     * @return
     */
    public static String beanToJson(Object object) {
        if (object != null) {
            return JSON.toJSONString(object);
        } else {
            return null;
        }
    }

    /**
     * JsonObj 转 JAVA
     * @param jsonObj
     * @param target
     * @param <T>
     * @return
     */
    public static <T> T jsonBeanToJava(JSONObject jsonObj, Class<T> target){
        if( jsonObj == null || target == null){
            return null;
        }
        return JSON.toJavaObject(jsonObj,target);
    }
    /**
     * String转JSON字符串
     *
     * @param key
     * @param value
     * @return
     */
    public static String stringToJsonByFastjson(String key, String value) {
        if (StringUtils.isEmpty(key) || StringUtils.isEmpty(value)) {
            return null;
        }
        Map<String, String> map = new HashMap<String, String>();
        map.put(key, value);
        return beanToJson(map, null);
    }

    /**
     * json字符串转list
     *
     * @param jsonStr
     * @return
     */
    public static <T> List<T> stringToList(String jsonStr, Class<T> model) {
        List<T> object = JSONArray.parseArray(jsonStr, model);
        return object;
    }
}
